{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "ngram_test.ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "metadata": {
        "id": "986Y0JagOye0",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "with open('data.txt', u'r') as f:\n",
        "    data = f.readlines()\n",
        "  "
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "nbA2dU26Pgmp",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        },
        "outputId": "d11f58de-ca57-4557-fc86-07bb535c99f7"
      },
      "cell_type": "code",
      "source": [
        "with open('data.txt', 'r', encoding='utf-8') as f:\n",
        "    data = f.readlines()\n",
        "    \n",
        "print(data[0])"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "　　我的故事，从1950年1月1日讲起。在此之前两年多的时间里，我在阴曹地府里受尽了人间难以想象的 酷刑。每次提审，我都会鸣冤叫屈。我的声音悲壮凄凉，传播到阎罗大殿的每个角落，激发出重重叠叠的 回声。我身受酷刑而绝不改悔，挣得了一个硬汉子的名声。我知道许多鬼卒对我暗中钦佩，我也知道阎王 老子对我不胜厌烦。为了让我认罪服输，他们使出了地狱酷刑中最歹毒的一招，将我扔到沸腾的油锅里， 翻来覆去，像炸(又鸟)一样炸了半个时辰，痛苦之状，难以言表。鬼卒还用叉子把我叉起来，高高举着， 一步步走上通往大殿的台阶。两边的鬼卒嘬口吹哨，如同成群的吸血蝙蝠鸣叫。我的身体滴油淅沥，落在 台阶上，冒出一簇簇黄烟……鬼卒小心翼翼地将我安放在阎罗殿前的青石板上，跪下向阎王报告：“大王 ，炸好了。”\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "u7ckeEiKP8ZH",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        },
        "outputId": "94495133-52c7-4401-8945-848e12566c27"
      },
      "cell_type": "code",
      "source": [
        "import re\n",
        "# 生成一个正则，负责找'()'包含的内容\n",
        "pattern = re.compile(r'\\(.*\\)')\n",
        "# 将其替换为空\n",
        "data = [pattern.sub('', lines) for lines in data]\n",
        "print(data[0])"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "　　我的故事，从1950年1月1日讲起。在此之前两年多的时间里，我在阴曹地府里受尽了人间难以想象的 酷刑。每次提审，我都会鸣冤叫屈。我的声音悲壮凄凉，传播到阎罗大殿的每个角落，激发出重重叠叠的 回声。我身受酷刑而绝不改悔，挣得了一个硬汉子的名声。我知道许多鬼卒对我暗中钦佩，我也知道阎王 老子对我不胜厌烦。为了让我认罪服输，他们使出了地狱酷刑中最歹毒的一招，将我扔到沸腾的油锅里， 翻来覆去，像炸一样炸了半个时辰，痛苦之状，难以言表。鬼卒还用叉子把我叉起来，高高举着， 一步步走上通往大殿的台阶。两边的鬼卒嘬口吹哨，如同成群的吸血蝙蝠鸣叫。我的身体滴油淅沥，落在 台阶上，冒出一簇簇黄烟……鬼卒小心翼翼地将我安放在阎罗殿前的青石板上，跪下向阎王报告：“大王 ，炸好了。”\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "xmgFHmttQTzY",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        },
        "outputId": "c40988fb-cefe-438c-a71d-9d0c0d5deb9f"
      },
      "cell_type": "code",
      "source": [
        "# 将.....替换为句号\n",
        "data = [line.replace('……', '。') for line in data if len(line) > 1]\n",
        "print(data[0])"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "　　我的故事，从1950年1月1日讲起。在此之前两年多的时间里，我在阴曹地府里受尽了人间难以想象的 酷刑。每次提审，我都会鸣冤叫屈。我的声音悲壮凄凉，传播到阎罗大殿的每个角落，激发出重重叠叠的 回声。我身受酷刑而绝不改悔，挣得了一个硬汉子的名声。我知道许多鬼卒对我暗中钦佩，我也知道阎王 老子对我不胜厌烦。为了让我认罪服输，他们使出了地狱酷刑中最歹毒的一招，将我扔到沸腾的油锅里， 翻来覆去，像炸一样炸了半个时辰，痛苦之状，难以言表。鬼卒还用叉子把我叉起来，高高举着， 一步步走上通往大殿的台阶。两边的鬼卒嘬口吹哨，如同成群的吸血蝙蝠鸣叫。我的身体滴油淅沥，落在 台阶上，冒出一簇簇黄烟。鬼卒小心翼翼地将我安放在阎罗殿前的青石板上，跪下向阎王报告：“大王 ，炸好了。”\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "PXSFP7qsQYPX",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "03b4e132-900c-453b-b58d-8f360107c96c"
      },
      "cell_type": "code",
      "source": [
        "# ==============判断char是否是乱码===================\n",
        "def is_uchar(uchar):\n",
        "    \"\"\"判断一个unicode是否是汉字\"\"\"\n",
        "    if uchar >= u'\\u4e00' and uchar<=u'\\u9fa5':\n",
        "            return True\n",
        "    \"\"\"判断一个unicode是否是数字\"\"\"\n",
        "    if uchar >= u'\\u0030' and uchar<=u'\\u0039':\n",
        "            return True       \n",
        "    \"\"\"判断一个unicode是否是英文字母\"\"\"\n",
        "    if (uchar >= u'\\u0041' and uchar<=u'\\u005a') or (uchar >= u'\\u0061' and uchar<=u'\\u007a'):\n",
        "            return True\n",
        "    if uchar in ('，','。','：','？','“','”','！','；','、','《','》','——'):\n",
        "            return True\n",
        "    return False\n",
        "\n",
        "# 将每行的list合成一个长字符串\n",
        "data = ''.join(data)\n",
        "data = [char for char in data if is_uchar(char)]\n",
        "data = ''.join(data)\n",
        "print(data[:100])"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "我的故事，从1950年1月1日讲起。在此之前两年多的时间里，我在阴曹地府里受尽了人间难以想象的酷刑。每次提审，我都会鸣冤叫屈。我的声音悲壮凄凉，传播到阎罗大殿的每个角落，激发出重重叠叠的回声。我身受酷\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "KjeedQQ5Qv_h",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### 2-gram"
      ]
    },
    {
      "metadata": {
        "id": "A6qPqZEqRQOA",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def n_gram(data, n):\n",
        "    d = {}\n",
        "    for i in range(len(data)-n):\n",
        "        if data[i:i+n] not in d:\n",
        "            d[data[i:i+n]] = {}\n",
        "            d[data[i:i+n]][data[i+n]] = 1\n",
        "        else:\n",
        "            if data[i+n] not in d[data[i:i+n]]:\n",
        "                d[data[i:i+n]][data[i+n]] = 1\n",
        "            else:\n",
        "                d[data[i:i+n]][data[i+n]] += 1\n",
        "    return d\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "IV20EnW4SHES",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        },
        "outputId": "14d1cf94-270b-40ec-ff3b-bf85fb8f4f1c"
      },
      "cell_type": "code",
      "source": [
        "d = n_gram(data, 3)\n",
        "print(len(d))\n",
        "\n",
        "outputs = '地府里受'\n",
        "for i in range(100):\n",
        "\n",
        "    inputs = outputs[-3:]\n",
        "    next_word = sorted(d[inputs].items(),key = lambda x:x[1],reverse = True)[0][0]\n",
        "    outputs += next_word\n",
        "    \n",
        "print(outputs)"
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "238169\n",
            "地府里受尽了人间难以想象出那个我未曾谋面但经常被同学们抛掷的砖头瓦片击中，那个生孩子的健将。我太太白氏陪嫁过来数年尚未生育。那时候，我听到了没有？”“我不是一头猪，都是我们的开放说，“我们要把它拖回去。”“我\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "6A7tILpoUdOX",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        },
        "outputId": "19a165f0-58d8-4fde-8038-d9464e2829a2"
      },
      "cell_type": "code",
      "source": [
        "d = n_gram(data, 4)\n",
        "print(len(d))\n",
        "\n",
        "outputs = '地府里受'\n",
        "for i in range(1000):\n",
        "\n",
        "    inputs = outputs[i:]\n",
        "    next_word = sorted(d[inputs].items(),key = lambda x:x[1],reverse = True)[0][0]\n",
        "    outputs += next_word\n",
        "    \n",
        "print(outputs)"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "323911\n",
            "地府里受尽了人间难以想象的酷刑。每次提审，我都会鸣冤叫屈。我的声音悲壮凄凉，传播到阎罗大殿的每个角落，激发出重重叠叠的回声。我身受酷刑而绝不改悔，挣得了一个硬汉子的名声。我知道他们全都清楚我的冤枉，他们从一开始我就不是那么坚定，我跟爹单干是图热闹。现在，我注视着他宽阔的肩膀和粗壮的胳膊，把我从梦境中惊醒，使我的身体，用豹子般的敏捷动作，拦住了洪泰岳的声音，但也不是太像。接下来的事情，就会比别人干得漂亮。能把长达四米的使牛大鞭扯下，抡圆，猛地抽下去我猛地挣脱了蓝脸手中的缰绳，朝着杨七冲去藤条从距离白氏鼻尖一寸处劈下，嗖的一声响，白氏毫发无伤，杨七这一手，练到了火候。这个偷摸狗的杂种，吃喝嫖赌抽，五毒俱全，糟光了他爹创下的家业，把他娘气得悬梁自尽，但他却赶着马车飞快地从我面前跑过去，仿佛要从眼眶中进出来，坚持，坚持十秒钟就是胜利。我听到他提到了西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿子西门金龙的儿\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "Tq8RturxZQC4",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}